package utils.effects
{
	import flash.display.Sprite;
	import flash.events.TimerEvent;
	import flash.utils.Timer;  
	public class MoveSnow extends Sprite 
	{  
		private var snow:Sprite;  
		private var timer:Timer;  
		private var _width:Number;
		private var _height:Number;
		private var _snowNum:uint = 30;
		
		public function MoveSnow(w:Number=500, h:Number=400) {  
			_width = w;
			_height = h;
			init();  
			//建立Timer计时器，每隔50毫秒发出一次记时事件   
			timer=new Timer(80);  
			//开始记时   
			timer.start();  
			//注册记时事件侦听   
			timer.addEventListener(TimerEvent.TIMER,initsnow);  
		}  
		//初始化雪花   
		private function init():void
		{  
			//使用循环创建150朵雪花，并初始化位置   
			for (var j:int=0; j<_snowNum; j++) {  
				snow=makeSnow();  
				addChild(snow);  
				//控制位置   
				snow.x=_width*Math.random();  
				snow.y=-_height*Math.random();  
				//控制透明度   
				snow.alpha=0.5*Math.random()+0.5;  
				//控制缩放   
				snow.scaleX=snow.scaleY=0.5*Math.random()+0.5;  
				//注册实例名称   
				snow.name="snow"+j;  
			}  
		}  
		//雪花运动   
		private function initsnow(evt:TimerEvent):void {  
			for (var j:int=0; j<_snowNum; j++) {  
				//获取雪花名称   
				var snows:Sprite = getChildByName("snow"+j) as Sprite;  
				//控制雪花运动   
				//snows.x+=Math.random()*2-1;  
				snows.y+=Math.random()*3;  
				//控制雪花旋转   
				snows.rotation+=Math.random()*18-9;  
				//超出舞台，初始化   
				if (snows.x>_width||snows.x<0||snows.y>_height) {  
					snows.x=_width*Math.random();  
					snows.y=0;  
				}  
				//强制刷新屏幕事件   
				evt.updateAfterEvent();  
			}  
		}  
		//绘制雪花   
		private function makeSnow():Sprite {  
			//定义雪花瓣数   
			var snowlength:Number=Math.floor(Math.random() * 5) + 8;  
			//定义雪花半径   
			var snowradius:Number=Math.random() * 5 + 5;  
			var sp:Sprite=new Sprite;  
			//设置绘图线形   
			sp.graphics.lineStyle(1,0xffffff);  
			//使用循环绘制雪花线条   
			for (var i:int=0; i < snowlength; i++) {  
				sp.graphics.moveTo(0,0);  
				//计算旋转角度   
				var angle:Number=2 * Math.PI * i / snowlength;  
				//绘制雪花   
				var x:int = int(snowradius * Math.cos(angle));  
				var y:int = int(snowradius * Math.sin(angle));  
				sp.graphics.lineTo(x,y);  
			}  
			return sp;  
		}  
	}  
}